package com.yeung.exam;


import com.yeung.exam.ReadUtils;

import java.util.Scanner;

import static java.lang.Math.max;

/**
 * 用l指针表示做指针, r指针表示右指针, 当k非0时, 让右指针一直向右移动,
 * 当右指针遇到0时,如果k>0(还剩的修改的机会次数),那么k=k-1, 然后右指针继续向右移动
 * 直到右指针遇到0了且k==0(没有修改次数), 这时移动左指针
 * 如果如果左指针指向的数为1,向右移动,若指向的数为0,则不向右移动
 * <p>
 * !!!!为什么要移动左指针??, 因为此时的右指针遇到0了, 我们需要移动滑动窗口(窗口的大小是在动态改变的)
 * 只有当左指针指向0了(此时的右指针指向的数也是0), 左右指针同时向右移动一个步
 * (相当于: 左指针向右移动释放了一次修改的机会, 而右指针使用了这一次机会)!!!!!
 * <p>
 * 此时右指针如果指向的不为0, 则一直向右移动, 若遇到0,此时的左右指针相减,即为最大的连续1串, 然后又移动窗口, 重复之前的步骤
 */
public class 最长连续1串 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[] ints1 = ReadUtils.str2Int(sc.nextLine(), " ");
        int[] num = ReadUtils.str2Int(sc.nextLine(), " ");
        int l = 0, r = 0;
        int res = 0;
        int n = ints1[0];
        int k = ints1[1];
        while (r < n) {
            if (num[r] == 1)
                r += 1;
            else if (k > 0) {
                k -= 1;
                r += 1;
            } else {
                res = max(res, r - l);
                while (l < r && num[l] == 1) {
                    l += 1;
                }
                r += 1;
                l += 1;

            }
        }
        res = max(res, r - l);
        System.out.println(res);
    }
}